<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class cpListeCommentaires extends cpListe
{
	
	protected $params = array();
	
	protected $page;
	
	public $lien_sort;
	
	# Filtres
	protected $page_id;
	protected $rechercher;
	protected $commentaire_statut;
	
	public function __construct($core)
	{
	
		parent::__construct($core, 'commentaires');
		
		$this->commentaire_statut = -1;

		$this->lien_sort = 'index.php?module=commentaires&page_id=%s&rechercher=%s&commentaire_statut=%s&sort=%s';
		
		$this->initColonnes(array(
			'case'			=> array('&nbsp;'),
			'auteur'		=> array(__('Auteur'), 'C.commentaire_auteur ASC, C.commentaire_date ASC', 'C.commentaire_auteur DESC, C.commentaire_date DESC'),
			'commentaire'	=> array(__('Date et commentaire'), 'C.commentaire_date ASC', 'C.commentaire_date DESC'),
			'page'			=> array(__('Sur la page'), 'P.page_date ASC, C.page_id ASC, C.commentaire_date ASC', 'P.page_date DESC, C.page_id DESC, C.commentaire_date DESC')
		), 'commentaire-desc');
		
		$this->params['order'] = $this->getOrdreSQL();
		
	}
	
	public function filtres()
	{
		
		# page_id: Afficher les commentaires d'une page en particulier
		if(!empty($_GET['page_id']) && is_numeric($_GET['page_id'])) {
			$page = $this->core->site->getPages(array(
				'page_id' => (integer) $_GET['page_id']
			), CP_GET_RS);
			
			if(!$page->isEmpty()) {
				$this->page = $page;
				$this->params['page_id'] = $this->page_id = (integer) $_GET['page_id'];
			}
		}
		
		# rechercher: Recherche par mot-clé sur les commentaires
		if(!empty($_GET['rechercher'])) {
			$this->params['rechercher'] = $this->rechercher = $_GET['rechercher'];
			$this->params['rechercher_extra'] = true;
		}
		
		# commentaire_statut: Afficher les commentaires selon leur statut
		if(isset($_GET['commentaire_statut']) &&
		   in_array($_GET['commentaire_statut'], array(
			CP_COMMENTAIRE_ATTENTE, CP_COMMENTAIRE_APPROUVE, CP_COMMENTAIRE_SPAM
		   ))
		  )
		{
			$this->params['commentaire_statut'] = $this->commentaire_statut = (integer) $_GET['commentaire_statut'];
		}
		
	}
	
	public function afficherFiltres()
	{
		
		# --- Compter les commentaires ---
		$count_params = $this->params;
		unset($count_params['commentaire_statut']);
		$count_params['group'] = 'C.commentaire_statut';
		$count = array(
			CP_COMMENTAIRE_APPROUVE => 0,
			CP_COMMENTAIRE_ATTENTE => 0,
			CP_COMMENTAIRE_SPAM => 0
		);
		$counter = $this->core->site->getCommentaires($count_params, CP_GET_COMPTEUR);
		while($counter->fetch()) {
			$count[$counter->commentaire_statut] = $counter->f(1);
		}
		$count_all = array_sum($count);
		
		
		# --- Affichage des filtres ---
				
		$url_liens_statut = 'index.php?module=commentaires&page_id='.$this->page_id.'&rechercher='.urlencode($this->rechercher).'&commentaire_statut=';
		
		$html=
		'<form id="filtres" class="filtres_tableau" action="index.php" method="GET">'.
		form::hidden('module', 'commentaires').
		form::hidden('page_id', (integer) $this->page_id).
		form::hidden('commentaire_statut', (integer) $this->commentaire_statut);
		
		if(isset($this->page_id)) {
			$html.=
			'<p class="filtre_commentaire_page">'.
				__('Commentaires pour la page').
				' <span class="filtre_commentaire_page_field">'.
					'<span class="val">'.html::escapeHTML($this->page->page_titre).'</span>'.
					'<a href="index.php?module=commentaires&rechercher='.urlencode($this->rechercher).'">[X]</a>'.
				'</span>'.
			'</p>';
		}
		
		$html.=
		'<p class="rechercher">'.
			form::field('rechercher', 30, 100, html::escapeHTML($this->rechercher)).
			'<input type="submit" value="'.__('Chercher dans les commentaires').'" />'.
		'</p>'.
		'<ul class="choix_horizontal">';
		
		$html.= ($this->commentaire_statut != -1) ?
			'<li><a href="'.$url_liens_statut.'-1">'.__('Tout').' (<span class="count">'.$count_all.'</span>)</a> |</li>' :
			'<li>'.__('Tout').' (<span class="count">'.$count_all.'</span>) |</li>';
			
		$html.= ($this->commentaire_statut != CP_COMMENTAIRE_APPROUVE) ?
			'<li><a href="'.$url_liens_statut.'1">'.__('Approuvé').' (<span class="count">'.$count[CP_COMMENTAIRE_APPROUVE].'</span>)</a> |</li>' :
			'<li>'.__('Approuvé').' (<span class="count">'.$count[CP_COMMENTAIRE_APPROUVE].'</span>) |</li>';
			
		$html.= ($this->commentaire_statut != CP_COMMENTAIRE_ATTENTE) ?		
			'<li><a href="'.$url_liens_statut.'2">'.__('En attente').' (<span class="count">'.$count[CP_COMMENTAIRE_ATTENTE].'</span>)</a> |</li>' :
			'<li>'.__('En attente').' (<span class="count">'.$count[CP_COMMENTAIRE_ATTENTE].'</span>) |</li>';
			
		$html.= ($this->commentaire_statut != CP_COMMENTAIRE_SPAM) ?
			'<li><a href="'.$url_liens_statut.'0">'.__('Indésirable').' (<span class="count">'.$count[CP_COMMENTAIRE_SPAM].'</span>)</a></li>' :
			'<li>'.__('Indésirable').' (<span class="count">'.$count[CP_COMMENTAIRE_SPAM].'</span>)</li>';
			
		$html.=
		'</ul>'.
		'</form>';
		
		return $html;
		
	}
	
	public function afficherListe($page,$nb_par_page,$enclose_block='')
	{
		
		$counter = $this->core->site->getCommentaires($this->params, CP_GET_COMPTEUR);
		
		if ($counter->f(0) == 0) {
			return '<div class="msg msgInfo">'.__('Pas de commentaire').'</div>';
		}
			
		$pager = new pager($page,$counter->f(0),$nb_par_page,10);
		$pager->html_prev = $this->html_prev;
		$pager->html_next = $this->html_next;
		$pager->var_page = 'page';
		$this->params['limit'] = array($pager->index_start,$nb_par_page);
			
		$html_block =
		'<table id="listeCommentaires">'.
		$this->getEnteteHTML(sprintf($this->lien_sort, (integer) $_GET['page_id'], str_replace('%', '%%', urlencode($_GET['rechercher'])), (integer) $this->commentaire_statut, '%s'), 'listeCommentaires_').
		'<tbody>'.
			'%s'.
			$this->editeurCommentaire().
		'</tbody>'.
		'</table>'.
		'<p class="options-liste">'.
			'<a href="#" id="selectionner_tout">'.__('sélectionner tout').'</a> - '.
			'<a href="#" id="inverser_selection">'.__('inverser la sélection').'</a>'.
		'</p>';

		if ($enclose_block) {
			$html_block = sprintf($enclose_block,$html_block);
		}
			
		$blocks = explode('%s',$html_block);
			
		$html = $blocks[0];
			
		$this->params['avec_page'] = true;
		$commentaires = $this->core->site->getCommentaires($this->params, CP_GET_STATIC);
			
		while($commentaires->fetch()) {
			$html.=$this->ligneCommentaire($commentaires);
		}
			
		$html.=
			$blocks[1].
			'<p>'.__('Page(s) :').' '.$pager->getLinks().'</p>';
				
		return $html;

	}
	
	public function ligneCommentaire($commentaire)
	{
		
		$actionsCommentaires = $this->core->auth->verifierPermission('commentaires') ?
				'<ul class="choix_horizontal" style="height:15px;">'.
					'<li><a href="#" class="lien_approuver">'.__('Approuver').'</a></li>'.
					'<li><a href="#" class="lien_attente">'.__('Mettre en attente').'</a></li>'.
					'<li><a href="#" class="lien_spam">'.__('Indésirable').'</a></li>'.
					'<li><a href="#" class="lien_supprimer">'.__('Supprimer').'</a></li>'.
					'<li style="border:none;"><a href="#" class="lien_editer">'.__('Éditer').'</a></li>'.
				'</ul>'
				: '';
		
		switch($commentaire->commentaire_statut):
			case CP_COMMENTAIRE_APPROUVE:
				$class='commentaire_approuve';
				$statut = '';
			break;
				
			case CP_COMMENTAIRE_ATTENTE:
				$class='commentaire_attente';
				$statut = __('En attente');
			break;
		
			case CP_COMMENTAIRE_SPAM:
				$class='commentaire_spam';
				$statut = __('Indésirable');
			break;
		endswitch;
		
		$html =
		'<tr id="commentaire_'.(integer) $commentaire->commentaire_id.'" class="'.$class.'" name="'.(integer) $commentaire->commentaire_id.'">'.
			'<td class="listeCommentaires_case">'.form::checkbox('commentaire_id[]', (integer) $commentaire->commentaire_id).'</td>'.
			'<td class="listeCommentaires_auteur">'.
				'<strong>'.html::escapeHTML($commentaire->commentaire_auteur).'</strong><br/>'.
				'<a class="commentaire_email" href="index.php?module=commentaires&rechercher='.urlencode($commentaire->commentaire_email).'" '.
				   'title="'.sprintf(__('Afficher tous les commentaires en provenance de %s.'), html::escapeHTML($commentaire->commentaire_email)).'">'.
				    html::escapeHTML($commentaire->commentaire_email).
				'</a><br/>'.
				'<a class="commentaire_ip" href="index.php?module=commentaires&rechercher='.urlencode($commentaire->commentaire_ip).'" '.
				   'title="'.sprintf(__('Afficher tous les commentaires en provenance de %s.'), html::escapeHTML($commentaire->commentaire_ip)).'">'.
				    html::escapeHTML($commentaire->commentaire_ip).
				'</a>'.
			'</td>'.
			'<td class="listeCommentaires_commentaire">'.
				'<span class="commentaire_statut">'.$statut.'</span>'.
				'<span class="commentaire_date">'.sprintf(__('Envoyé %s'), '<span class="commentaire_date_val">'.cpDt::belleDate(array('le'=>true), strtotime($commentaire->commentaire_date)).'</span>').'</span>'.
				'<div class="commentaire_contenu">'.
					$commentaire->commentaire_contenu.
				'</div>'.
				$actionsCommentaires.
			'</td>'.
			'<td class="listeCommentaires_page">'.
				'<strong>'.html::escapeHTML($commentaire->page->page_titre).'</strong>'.
				'<ul class="choix_horizontal">'.
					'<li><a href="index.php?module=commentaires&page_id='.(integer) $commentaire->page->page_id.'">'.__('Voir les commentaires').'</a></li>'.
					'<li><a href="index.php?module=modifierPage&page_id='.(integer) $commentaire->page->page_id.'">'.__('Éditer la page').'</a></li>'.
					'<li style="border:0px;"><a href="'.$commentaire->page->getURLAbsolue().'" target="_blank">'.__('Visiter la page').'</a></li>'.
				'</ul>'.
			'</td>'.
		'</tr>';
		
		return $html;		
	}
	
	public function editeurCommentaire()
	{
		$html=
			'<tr class="commentaire_editer" id="editeur_commentaire">'.
				'<td colspan="4">'.
					'<div class="conteneurMsg"></div>'.
					'<p>'.
						'<label for="commentaire_auteur">'.__('Auteur').'</label>'.
						'<input type="text" id="commentaire_auteur" name="commentaire_auteur" size="40" maxlength="80" value="" />'.
					'</p>'.
					'<p>'.
						'<label for="commentaire_email">'.__('Adresse électronique').'</label>'.
						'<input type="text" id="commentaire_email" name="commentaire_email" size="40" maxlength="80" value="" />'.
					'</p>';
					
		if($this->core->site->getPropriete('commentaire_titre') == 1) {
			$html.=
					'<p>'.
						'<label for="commentaire_titre">'.__('Titre du commentaire').'</label>'.
						'<input type="text" id="commentaire_titre" name="commentaire_titre" size="40" maxlength="250" value="" />'.
					'</p>';
		}
		
		$html.=
					'<p>'.
						'<label for="commentaire_contenu">'.__('Commentaire').'</label>'.
						'<textarea id="commentaire_contenu" name="commentaire_contenu" rows="7" cols="45" class="no_editor"></textarea>'.
					'</p>'.
					'<p>'.
						'<label for="commentaire_statut">'.__('Statut').'</label>'.
						form::combo('commentaire_statut', array(
							__('Approuvé') => CP_COMMENTAIRE_APPROUVE,
							__('En attente') => CP_COMMENTAIRE_ATTENTE,
							__('Indésirable') => CP_COMMENTAIRE_SPAM
						)).
					'</p>'.
					'<p>'.
						'<label for="commentaire_ip">'.__('Adresse IP').'</label>'.
						'<input type="text" id="commentaire_ip" name="commentaire_ip" size="40" maxlength="15" value="" />'.
					'</p>'.
					'<p>'.
						'<label for="commentaire_date">'.__('Date').'</label>'.
						'<input type="text" id="commentaire_date" name="commentaire_date" size="40" maxlength="25" value="" />'.
					'</p>'.
					'<p>'.
						'<input id="annuler_editer_commentaire" type="button" value="'.__('Annuler').'" />'.
						'<input id="enregistrer_editer_commentaire" type="submit" value="'.__('Mettre à jour le commentaire').'" style="margin-left:15px;" />'.
					'</p>'.
				'</td>'.
			'</tr>';
			
		return $html;
		
	}
	
}

?>